package tests;

import estructuras.Arbol23;
import junit.framework.TestCase;

public class Arbol23Test extends TestCase {

	public void testAdd() {
		Arbol23<String> arbol = new Arbol23<String>();
		arbol.setAllowRepetitions(false)	;
		
		arbol.add("d");
		
		if(!arbol.show().equals("(L{} 1{d} C{} 2{} R{})"))
			fail("No se guarda correctamente (1).");
				
		arbol.add("d");
		
		if(!arbol.show().equals("(L{} 1{d} C{} 2{} R{})"))
			fail("No se guarda correctamente (1).");

		arbol.add("c");		
		
		if(!arbol.show().equals("(L{} 1{c} C{} 2{d} R{})"))
			fail("No se guarda correctamente (2).");

		arbol.add("b");
		
		//System.out.println(arbol.mostrar());
		if(!arbol.show().equals("(L{(L{} 1{b} C{} 2{} R{})} 1{c} C{} 2{} R{(L{} 1{d} C{} 2{} R{})})"))
			fail("No se guarda correctamente (3).");

		arbol.add("a");
		
		//System.out.println(arbol.mostrar());
		if(!arbol.show().equals("(L{(L{} 1{a} C{} 2{b} R{})} 1{c} C{} 2{} R{(L{} 1{d} C{} 2{} R{})})"))
			fail("No se guarda correctamente (3).");

		arbol.add("aa");
		
		//System.out.println(arbol.mostrar());
		if(!arbol.show().equals("(L{(L{} 1{a} C{} 2{} R{})} 1{aa} C{(L{} 1{b} C{} 2{} R{})} 2{c} R{(L{} 1{d} C{} 2{} R{})})"))
			fail("No se guarda correctamente (4).");
	}
	
	public void testAddBook() {
		Arbol23<String> arbol = new Arbol23<String>();
		arbol.add("10");
		arbol.add("30");
		arbol.add("40");
		arbol.add("50");
		arbol.add("20");
		
		if(!arbol.show().equals("(L{(L{} 1{10} C{} 2{20} R{})} 1{30} C{} 2{} R{(L{} 1{40} C{} 2{50} R{})})"))
			fail("No se guarda correctamente (1).");
		
		arbol.add("19");

		if(!arbol.show().equals("(L{(L{} 1{10} C{} 2{} R{})} 1{19} C{(L{} 1{20} C{} 2{} R{})} 2{30} R{(L{} 1{40} C{} 2{50} R{})})"))
			fail("No se guarda correctamente (2).");

		arbol.add("70");
		arbol.add("80");
		arbol.add("90");
		arbol.add("100");
		
		if(!arbol.show().equals("(L{(L{} 1{10} C{} 2{100} R{})} 1{19} C{(L{} 1{20} C{} 2{} R{})} 2{30} R{(L{(L{(L{} 1{10} C{} 2{100} R{})} 1{19} C{} 2{} R{(L{} 1{20} C{} 2{} R{})})} 1{30} C{} 2{} R{(L{(L{} 1{40} C{} 2{} R{})} 1{50} C{(L{} 1{70} C{} 2{} R{})} 2{80} R{(L{} 1{90} C{} 2{} R{})})})})"))
			fail("No se guarda correctamente (3).");
	}
	
	public void testRemove() {
		Arbol23<String> arbol = new Arbol23<String>();
		
		// Prueba para nivel uno
		arbol.add("10");
		arbol.remove("10");
		if(!arbol.show().equals("(L{} 1{} C{} 2{} R{})"))
			fail("No se borra correctamente (1).");
		
		// Pureba para nivel uno con dos nodos
		arbol.add("10");
		arbol.add("30");
		arbol.remove("10");
		if(!arbol.show().equals("(L{} 1{30} C{} 2{} R{})"))
			fail("No se borra correctamente (1).");
		arbol.remove("30");
		if(!arbol.show().equals("(L{} 1{} C{} 2{} R{})"))
			fail("No se borra correctamente (1).");

		arbol.add("10");
		arbol.add("30");
		arbol.add("40");
		arbol.add("50");
		arbol.add("20");
		
		if(!arbol.show().equals("(L{(L{} 1{10} C{} 2{20} R{})} 1{30} C{} 2{} R{(L{} 1{40} C{} 2{50} R{})})"))
			fail("No se guarda correctamente (1).");
		
		arbol.add("19");

		if(!arbol.show().equals("(L{(L{} 1{10} C{} 2{} R{})} 1{19} C{(L{} 1{20} C{} 2{} R{})} 2{30} R{(L{} 1{40} C{} 2{50} R{})})"))
			fail("No se guarda correctamente (2).");

		arbol.add("70");
		arbol.add("80");
		arbol.add("90");
		arbol.add("100");
		
		if(!arbol.show().equals("(L{(L{} 1{10} C{} 2{100} R{})} 1{19} C{(L{} 1{20} C{} 2{} R{})} 2{30} R{(L{(L{(L{} 1{10} C{} 2{100} R{})} 1{19} C{} 2{} R{(L{} 1{20} C{} 2{} R{})})} 1{30} C{} 2{} R{(L{(L{} 1{40} C{} 2{} R{})} 1{50} C{(L{} 1{70} C{} 2{} R{})} 2{80} R{(L{} 1{90} C{} 2{} R{})})})})"))
			fail("No se guarda correctamente (3).");
	}
	
	public void testAddWithRepetitions() {
		Arbol23<String> arbol = new Arbol23<String>();
		arbol.setAllowRepetitions(true)	;
		
		arbol.add("d");
		
		if(!arbol.show().equals("(L{} 1{d} C{} 2{} R{})"))
			fail("No se guarda correctamente (1).");
		
		arbol.add("d");
		
		if(!arbol.show().equals("(L{} 1{d} C{} 2{d} R{})"))
			fail("No se guarda correctamente (2).");
		
		arbol.add("d");
		
		if(!arbol.show().equals("(L{(L{} 1{d} C{} 2{} R{})} 1{d} C{} 2{} R{(L{} 1{d} C{} 2{} R{})})"))
			fail("No se guarda correctamente (2).");

		arbol.add("e");
		
		if(!arbol.show().equals("(L{(L{} 1{d} C{} 2{} R{})} 1{d} C{} 2{} R{(L{} 1{d} C{} 2{e} R{})})"))
			fail("No se guarda correctamente (2).");
		
		arbol.add("e");
		arbol.add("d");
		arbol.add("e");
		arbol.add("d");
		//arbol.add("e");
		System.out.println(arbol.show());

	}
}
